from google.appengine.ext import db

################################################################################
# PARTIE
# Un identifiant de partie pour en avoir plusieurs a la fois (on verra)
################################################################################
class dbPartie(db.Model):
  tour = db.IntegerProperty(default=0)
  finDePartie = db.IntegerProperty(default=100) # fin de partie en tour
  maxJoueurPF = db.IntegerProperty(default=6)  # Nombre max de joueur par camp
  nbOrdre = db.IntegerProperty(default=3)  # Nombre max d'action par attaque
  run = db.BooleanProperty(default=True)	# partie en pause ou non

################################################################################
# ROYAUME
# Les differentes equipes
################################################################################
class dbRoyaume(db.Model):
  nom = db.StringProperty()
  regionDepart = db.StringProperty()  # Region de depart
  impot = db.IntegerProperty(default=50)        # Taux d'imposition
  anarchie = db.BooleanProperty(default=False)
  usurierEnSecurite = db.BooleanProperty(default=True)
  keyPartie = db.ReferenceProperty(dbPartie)   # Dans quelle partie

################################################################################
# REGION
################################################################################
class dbRegion(db.Model):
  nom = db.StringProperty()
  etat = db.IntegerProperty(default=0)        # Ok - revolte - Peste
  type = db.IntegerProperty(default=0)        # montagneuse - plaine - foret
  morale = db.IntegerProperty(default=100)        # niveau du morale
  meteo = db.IntegerProperty(default=0)        # beau - Pluie - brouillard - neige
  keyRoyaume = db.ReferenceProperty(dbRoyaume) # a qui elle appartient
  keyPartie = db.ReferenceProperty(dbPartie)   # Dans quelle partie
  
################################################################################
# TITRE
################################################################################
class dbTitre(db.Model):
  nom = db.StringProperty()
  salaireMin =  db.IntegerProperty(default=0)
  attribution = db.StringProperty()  # Le type d'armee que peut acquerir ce titre

################################################################################
# USURIER
################################################################################
class dbUsurier(db.Model):
  argent =  db.IntegerProperty(default=0)
  compteEnBanque =  db.IntegerProperty(default=0)

################################################################################
# LOCALISATION
################################################################################
class dbLocalisation(db.Model):
  courante = db.StringProperty()
  suivante = db.StringProperty(choices=set(["QG", "Chateau", "Usurier","Taverne","Campagne","Fille de joie"]))

################################################################################
# JOUEUR
################################################################################
class dbJoueur(db.Model):
  identifiant = db.UserProperty() #required=True)
  nom = db.StringProperty() # Nom dans le jeux (intialise a celui de facebook ??)
  numeroInsurge =  db.IntegerProperty(default=0)  # 0 = Pas insurge
  keyPartie = db.ReferenceProperty(dbPartie) # Reference sur la partie en cours
  keyRoyaume = db.ReferenceProperty(dbRoyaume)
  keyTitre = db.ReferenceProperty(dbTitre)
  keyLocalisation = db.ReferenceProperty(dbLocalisation)
  keyUsurier = db.ReferenceProperty(dbUsurier)

################################################################################
# GEOLES
# ...
################################################################################
class dbGeoles(db.Model):
  nom = db.StringProperty()
  rancon = db.IntegerProperty(default=0)
  keyRoyaume = db.ReferenceProperty(dbRoyaume) # a qui elle appartient
  keyJoueur = db.ReferenceProperty(dbJoueur) # a qui appartient le prisonnier

################################################################################
# BATIMENT
# type:
 # 1 - Caserne, niveau 1 = 5 armee, niv 2 = 10 armee, niveau 3 = ...
################################################################################
class dbBatiment(db.Model): # Batiments sur la region
  type =  db.IntegerProperty(default=0) # Pas de batiment
  Niveau =  db.IntegerProperty(default=0)
  enConstruction = db.IntegerProperty(default=0) # Si > 0 en construction
  keyRegion = db.ReferenceProperty(dbRegion) # ou est il situe ??
  keyJoueur = db.ReferenceProperty(dbJoueur) # a qui il appartient

################################################################################
# ARMEE
################################################################################
# sequenceCombat:
  # 2 car l'ordre 00 bas - 01 milieu - 02 haut
  # 1 car separateur _
  # les armees
################################################################################
class dbArmee(db.Model):
  date = db.DateTimeProperty(auto_now_add=True) # Pour ordre de bataille
  sequenceCombat = db.StringProperty()
  precedenteRegion  = db.StringProperty() # Region d'ou elle vient (au cas ou annulation)
  keyRegion = db.ReferenceProperty(dbRegion) #,required=True) # Region obligatoire 
  keyJoueur = db.ReferenceProperty(dbJoueur) # Si pas de joueur armee poste pour defendre la region

################################################################################
# ResultatCombat
################################################################################
class dbResultatCombat(db.Model):
  tour = db.IntegerProperty()
  keyRegion = db.ReferenceProperty(dbRegion)
  resultat = db.TextProperty()

